#pragma once
#include "BSem.h"

typedef struct job 
{
    void (*function)(void*);    // 函数指针，指向任务
    void* arg;                  // 实参
    struct job* next;
} Job;

typedef struct 
{
    Job* front;
    Job* rear;
    int size;
    pthread_mutex_t mutex;    // 用于添加任务和删除任务
    BSem has_jobs;            // 判断是否有任务
} JobQueue;

// API
void jobqueue_init(JobQueue* q);
void jobqueue_destroy(JobQueue* q);

void jobqueue_push(JobQueue* q, Job* job);
Job* jobqueue_pop(JobQueue* q);
void jobqueue_clear(JobQueue* q);
